package com.fit.utils.se;


/**
 * 数据转换对象(可以定义在类型不确定的地方)
 * 此对象可以将一个不确定的类型的对象转换为一个确定的类型的对象
 * @author hcl
 *
 */
public class Record<T> {
	
	/**
	 * 存储的数据
	 */
	private T data;
	
	
	/**
	 * 重写构造方法
	 * @param data
	 */
	public Record(T data){
		this.data = data;
	}
	
	/**
	 * 以泛型的方式获取数据
	 * @return
	 */
	public T getData(){
		return data;
	}
	/**
	 * 获取字符串
	 * @return
	 */
	public String getString(){
		return RecordUtil.getString(this.data);
	}
	
	/**
	 * 获取Int
	 * @return
	 */
	public Integer getInteger(){
		return RecordUtil.getInteger(this.data);
	}
	
	/**
	 * 获取byte
	 * @return
	 */
	public Byte getByte(){
		return RecordUtil.getByte(this.data);
	}
	
	/**
	 * 获取Short
	 * @return
	 */
	public Short getShort(){
		return RecordUtil.getShort(this.data);
	}
	
	/**
	 * 获取Long
	 * @return
	 */
	public Long getLong(){
		return RecordUtil.getLong(this.data);
	}
	
	
	/**
	 * 获取Float
	 * @return
	 */
	public Float getFloat(){
		return RecordUtil.getFloat(this.data);
	}
	
	
	/**
	 * 获取Double
	 * @return
	 */
	public Double getDouble(){
		return RecordUtil.getDouble(this.data);
	}
	
	/**
	 * 获取Boolean
	 * @return
	 */
	public Boolean getBoolean(){
		return RecordUtil.getBoolean(this.data);
	}
	
	/**
	 * 获取Character
	 * @return
	 */
	public Character getCharacter(){
		return RecordUtil.getCharacter(this.data);
	}
	
	/**
	 * 根据class获取
	 * @param clazz
	 * @return
	 */
	public <K> K get(Class<K> clazz){
		return RecordUtil.get(this.data, clazz);
	}
	
	/**
	 * 根据返回的类型获取
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public <K> K get(){
		return (K)this.data;
	}

	@Override
	public String toString() {
		return this.getString();
	}
}
